Angular-এ সার্ভিস এবং ডিপেন্ডেন্সি ইনজেকশন (DI) অত্যন্ত গুরুত্বপূর্ণ ধারণা। Angular অ্যাপ্লিকেশন গঠনের জন্য বিভিন্ন কম্পোনেন্ট, ডিরেক্টিভ এবং সার্ভিসকে একটি মডুলার ও স্কেলেবল উপায়ে একে অপরের সাথে সংযুক্ত করা হয়। এখানে, সার্ভিস হলো সেই কোড যা কম্পোনেন্টের লজিক বা ডেটা ম্যানেজমেন্টের কাজ করে, আর ডিপেন্ডেন্সি ইনজেকশন হল Angular এর একটি ডিজাইন প্যাটার্ন যা সার্ভিস এবং অন্যান্য ডিপেন্ডেন্সি কম্পোনেন্টে ইনজেক্ট করতে ব্যবহৃত হয়।
সার্ভিস হলো একটি ক্লাস, যা সাধারণত একাধিক কম্পোনেন্ট বা অন্যান্য সার্ভিসের মধ্যে শেয়ারযোগ্য লজিক এবং ডেটা সরবরাহ করে। এটি সাধারণত Business Logic বা Data Access এর জন্য ব্যবহৃত হয়। Angular সার্ভিস ক্লাসগুলি একক ইন্সট্যান্সে (singleton) কাজ করে, যা সার্ভিসকে একাধিক কম্পোনেন্টে শেয়ার করার সুবিধা দেয়।
সার্ভিস তৈরি করতে Angular CLI ব্যবহার করা হয়:
ng generate service user
উদাহরণ:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class UserService {
constructor() { }
getUserData() {
return { name: 'John', age: 30 };
}
}
এখানে, @Injectable
ডেকোরেটরটি Angular-কে জানিয়ে দেয় যে এই ক্লাসটি একটি সার্ভিস এবং এটি ইনজেকশনের জন্য উপলব্ধ। providedIn: 'root'
নির্দেশ করে যে সার্ভিসটি অ্যাপ্লিকেশন জুড়ে একটি একক ইন্সট্যান্স (singleton) হিসেবে ব্যবহৃত হবে।
ডিপেন্ডেন্সি ইনজেকশন (DI) হলো একটি ডিজাইন প্যাটার্ন, যা মাধ্যমে একটি অবজেক্ট তার ডিপেন্ডেন্সি (যেমন সার্ভিস, কনফিগারেশন, অন্যান্য অবজেক্ট) নিজে তৈরি না করে, বরং এগুলি অ্যাঙ্গুলার ইঞ্জেকশন মেকানিজম দ্বারা সরবরাহ করা হয়।
Angular একটি DI কন্টেইনার ব্যবহার করে যা একাধিক সার্ভিসের একক ইন্সট্যান্স তৈরি করে এবং তা বিভিন্ন কম্পোনেন্ট বা সার্ভিসে ইনজেক্ট করে। DI কোডকে আরও মডুলার, টেস্টেবল এবং পুনঃব্যবহারযোগ্য করে তোলে।
ধরা যাক, আপনি একটি UserService
সার্ভিস কম্পোনেন্টে ইনজেক্ট করতে চান:
import { Component } from '@angular/core';
import { UserService } from './user.service';
@Component({
selector: 'app-root',
template: `<h1>{{ user.name }}</h1>`
})
export class AppComponent {
user: any;
constructor(private userService: UserService) {
this.user = this.userService.getUserData();
}
}
এখানে, UserService
কে AppComponent
-এ ইনজেক্ট করা হয়েছে constructor
এর মাধ্যমে। Angular নিজেই UserService
কে তৈরি করে এবং কম্পোনেন্টে সরবরাহ করে।
@Injectable
ডেকোরেটরের মাধ্যমে মার্ক করা: Angular জানিয়ে দেয় যে এটি একটি ইনজেকশনযোগ্য ক্লাস।providedIn: 'root'
দ্বারা প্রোভাইড করা হয়, তাহলে এটি অ্যাপ্লিকেশন জুড়ে একক (singleton) সার্ভিস হিসেবে ব্যবহৃত হবে।সার্ভিসকে একটি নির্দিষ্ট মডিউলে প্রোভাইড করতে চাইলে, providers
অ্যারে ব্যবহার করা হয়।
উদাহরণ:
@NgModule({
providers: [UserService]
})
export class UserModule { }
একটি কম্পোনেন্টে শুধুমাত্র সেই কম্পোনেন্টের জন্য সার্ভিস প্রোভাইড করা যেতে পারে।
উদাহরণ:
@Component({
selector: 'app-user',
providers: [UserService]
})
export class UserComponent {
constructor(private userService: UserService) { }
}
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class ProductService {
getProducts() {
return ['Product 1', 'Product 2', 'Product 3'];
}
}
@Component({
selector: 'app-product',
template: `<ul><li *ngFor="let product of products">{{ product }}</li></ul>`
})
export class ProductComponent {
products: string[];
constructor(private productService: ProductService) {
this.products = this.productService.getProducts();
}
}
এখানে ProductService
সার্ভিসটি ProductComponent
-এ ইনজেক্ট করা হয়েছে, এবং getProducts()
মেথডের মাধ্যমে ডেটা প্রাপ্তি হচ্ছে।
সারাংশ:
Angular-এ সার্ভিস এবং ডিপেন্ডেন্সি ইনজেকশন অ্যাপ্লিকেশন ডেভেলপমেন্টকে মডুলার, পুনঃব্যবহারযোগ্য এবং টেস্টযোগ্য করে তোলে। সার্ভিস কম্পোনেন্টে ইনজেক্ট করা হয় এবং তা ডেটা এবং লজিক সরবরাহ করে। ডিপেন্ডেন্সি ইনজেকশন দ্বারা ডিপেন্ডেন্সি কম্পোনেন্ট বা সার্ভিসের মধ্যে সরবরাহ করা হয়, যা কোডের পরিষ্কারতা এবং পরিচালনক্ষমতা বৃদ্ধি করে।
Read more